32. Kmeans——信用卡用户行为模式聚类

本节学习目标

  • 理解 K-Means 聚类算法 的核心思想
  • 掌握信用卡用户行为数据的 预处理流程
  • 学会使用 sklearn 进行 K-Means 聚类建模
  • 能够对聚类结果进行 可视化业务解读

什么是聚类分析?

聚类 是一种 无监督学习 方法:

  • 无需标签,自动发现数据中的 内在结构
  • 将相似样本归为同一组(
  • 不同簇之间的样本差异尽可能大

金融场景应用:客户细分、风险识别、精准营销

信用卡用户分层的商业价值

信用卡用户聚类商业目标 展示聚类分析在客户细分、风险控制和精准营销三个方面的应用价值 👥 客户细分 识别不同消费群体 差异化产品设计 提升客户体验 🛡️ 风险控制 识别高风险行为 预警异常交易 降低坏账率 🎯 精准营销 针对性营销策略 提高转化率 优化营销成本

K-Means 算法核心思想

K-Means算法流程 展示K-Means算法从初始化到收敛的四个关键步骤 Step 1 随机选取 K 个初始 聚类中心 Step 2 计算每个样本 到中心的距离 分配到最近簇 Step 3 重新计算 每个簇的 质心位置 Step 4 是否收敛? 是→结束 否→回Step2 未收敛,继续迭代

数据准备:导入库与读取数据

Listing 1
# ==================== 导入必要的库 ====================
import pandas as pd          # 数据处理库
import numpy as np           # 数值计算库
from sklearn.cluster import KMeans          # K-Means聚类算法
from sklearn.metrics import silhouette_score # 轮廓系数评估指标
import matplotlib.pyplot as plt             # 绘图库
import seaborn as sns                       # 统计绘图库

# ==================== 读取数据 ====================
# 读取信用卡用户数据,包含用户ID和各种消费行为特征
data = pd.read_csv('09_CC GENERAL.csv')

# ==================== 数据探索 ====================
print('数据形状:', data.shape)
print('\n数据预览:')
print(data.head())

数据清洗:删除无关列与处理缺失值

Listing 2
# ==================== 数据清洗 ====================
# 删除客户ID列,因为聚类算法不应受ID影响
data_clean = data.drop(['CUST_ID'], axis=1)

# ==================== 处理缺失值 ====================
# 使用前向填充方法处理缺失值
data_clean.fillna(method='ffill', inplace=True)

print(f'缺失值处理后剩余缺失值: {data_clean.isnull().sum().sum()}')

# ==================== 数据描述统计 ====================
print('\n数据描述统计:')
print(data_clean.describe())

⭐ K-Means 聚类建模(平台任务)

Listing 3
# 注:09_CC GENERAL.csv数据文件本地没有,但平台已经内置
# ⚠️ 平台原始代码 - 请原样输入至教学平台(注释除外),平台才会判定答案正确
import pandas as pd  # 导入Pandas数据分析库
data = pd.read_csv('09_CC GENERAL.csv')  # 从CSV文件读取数据存入data
 
# 数据处理
data.drop(['CUST_ID'], axis=1, inplace=True)
data.fillna(method='ffill', inplace=True)  # 使用前向填充法处理缺失值
 
from sklearn.cluster import KMeans  # 导入Scikit-learn的KMeans模块
import matplotlib.pyplot as plt  # 导入Matplotlib绑图库
 
# 使用Kmeans算法对数据进行聚类
kmeans = KMeans(n_clusters=5, n_init=10, max_iter=300,algorithm="elkan", random_state=42)
kmeans.fit(data)  # 在数据上训练kmeans模型
 
# 可视化展示聚类结果
plt.scatter(data.iloc[:, 0], data.iloc[:, 1], c=kmeans.labels_, cmap='viridis')
plt.savefig("s.png")  # 保存图形至文件
plt.show()  # 显示图形
 
# 分析不同类别的用户特征和行为差异
data['cluster'] = kmeans.labels_
cluster_summary = data.groupby('cluster').mean()  # 按指定列分组聚合
print(cluster_summary)  # 输出聚类数据
 
# 对聚类结果进行评估
from sklearn.metrics import silhouette_score
print(silhouette_score(data, kmeans.labels_))  # 输出均值数据

平台代码逐行解读(上)

代码 含义
pd.read_csv(...) 从 CSV 文件读取数据
data.drop(['CUST_ID'], ...) 删除客户 ID 列
data.fillna(method='ffill') 前向填充缺失值
KMeans(n_clusters=5, ...) 创建 5 簇的 K-Means 模型
kmeans.fit(data) 在数据上训练模型

平台代码逐行解读(下)

代码 含义
plt.scatter(...) 绘制聚类散点图
c=kmeans.labels_ 用簇标签着色
data.groupby('cluster').mean() 按簇计算各特征均值
silhouette_score(...) 计算轮廓系数评估质量

关键参数说明

  • n_clusters=5:分为 5 个簇
  • n_init=10:随机初始化 10 次取最优
  • max_iter=300:最大迭代 300 次

聚类结果可视化

# ==================== 可视化前两维特征的聚类结果 ====================
plt.figure(figsize=(10, 8))

scatter = plt.scatter(
    data_clean.iloc[:, 0],   # x坐标:第一个特征
    data_clean.iloc[:, 1],   # y坐标:第二个特征
    c=labels,                # 颜色根据簇标签着色
    cmap='viridis',          # 使用viridis配色方案
    s=50,                    # 点的大小
    alpha=0.6                # 透明度
)

plt.colorbar(scatter, label='Cluster')
plt.title('信用卡用户聚类结果', fontsize=14)
plt.xlabel('特征1', fontsize=12)
plt.ylabel('特征2', fontsize=12)
plt.grid(True, alpha=0.3)
plt.tight_layout()
plt.show()
Figure 1

聚类评估:轮廓系数

轮廓系数解读 展示轮廓系数从-1到1的范围及不同区间的聚类质量解读 轮廓系数 (Silhouette Score) 解读 -1 0.2 0.5 1 < 0.2:聚类效果较差,簇间重叠严重 0.2 - 0.5:中等聚类,可考虑调整 K 值 0.5 - 0.7:良好聚类,样本分配合理 > 0.7:优秀聚类,簇间分离度高

用户行为特征分析

Listing 4
# ==================== 按簇统计特征均值 ====================
cluster_summary = data_clean.groupby('cluster').mean()
print('各簇平均特征:')
print(cluster_summary)

# ==================== 计算轮廓系数 ====================
silhouette_avg = silhouette_score(data_clean.iloc[:, :-1], labels)
print(f'\n平均轮廓系数: {silhouette_avg:.4f}')

# ==================== 轮廓系数解读 ====================
print('\n轮廓系数解读:')
if silhouette_avg > 0.5:
    print('  聚类效果良好,簇间分离度高')
elif silhouette_avg > 0.2:
    print('  聚类效果中等,可考虑调整K值或特征')
else:
    print('  聚类效果较差,建议重新选择特征或算法')

商业应用:用户分群策略

用户分群策略矩阵 基于消费金额和消费频率的四象限用户分群矩阵 消费频率 → 消费金额 → 💎 潜力客户 高消费·低频率 策略:提升消费频率 👑 VIP 客户 高消费·高频率 策略:专属尊享服务 ⚠️ 流失风险 低消费·低频率 策略:召回激活活动 🏷️ 价格敏感 低消费·高频率 策略:优惠券激励升级

本节小结

  • K-Means 是经典的无监督聚类算法,迭代优化簇分配
  • 数据预处理包括 删除无关列缺失值填充
  • 轮廓系数 是评估聚类质量的关键指标
  • 聚类结果需结合 业务场景 进行分群解读
  • 信用卡用户聚类助力 差异化运营精准营销